package 设计模式.memento.demo1;

/**
 * 备忘录模式
 *      - 提供了一种弥补真实实现缺陷的方法，让“后悔药”在程序的世界中真实可行。
 *      - 在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
 *
 *  使用场景：
 *      - 需要保存和恢复数据的相关状态的场景
 */
public class Clinet {
    public static void main(String[] args) {
        // 声明主角，初始化状态
        Boy boy = new Boy();
        boy.setState("心情很好！");

        System.out.println("============ 男孩现在的状态 ==========");
        System.out.println(boy.getState());

        // 声明备忘录的管理者
        Caretaker caretaker = new Caretaker();
        // 记录当前状态
        caretaker.setMemento(boy.createMemento());

        // 追妹子失败后状态变化啦
        boy.changeState();
        System.out.println("============ 最妹子失败后的状态 ==========");
        System.out.println(boy.getState());

        // 恢复原状
        boy.restoreMemento(caretaker.getMemento());
        System.out.println("============ 代码恢复追妹子前的状态男孩现在的状态 ==========");
        System.out.println(boy.getState());
    }
}
